import axios from 'axios'
import store from '@/store'
import { message, Modal } from 'ant-design-vue'
import { getToken } from '@/utils/auth'

message.config({
  duration: 3,
  maxCount: 2
})
// create an axios instance
const service = axios.create({
  baseURL: '/api', // api 的 base_url
  withCredentials: false, // 跨域请求时发送 cookies
  timeout: 50000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // Do something before request is sent
    if (store.getters.token) {
      // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
      config.headers['token'] = getToken()
    }
    return config
  },
  error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
  }
)

// response interceptor
// 拦截器
service.interceptors.response.use(
  /**
   * If you want to get information such as headers or status
   * Please return  response => response
  */
  /**
   * 下面的注释为通过在response里，自定义code来标示请求状态
   * 当code返回如下情况则说明权限有问题，登出并返回到登录页
   * 如想通过 XMLHttpRequest 来状态码标识 逻辑可写在下面error中
   * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
   */
  response => {
    const res = response.data
    if ( (res.code !== 200 && response.status === 200 )) {
      message.error(res.msg ? res.msg : "请求异常");
      return Promise.reject('error')
    } else {
      if (response.config.url === '/login') {
        let data = {
          code: res.code,
          msg: res.msg,
          id: res.id,
          avatar: res.avatar,
          name: res.username,
          token: response.headers.token
        }
        return data;
      }
      return res
    }
  },
  error => {
    console.log('err' + error) // for debug
    message.error(error.message);
    return Promise.reject("请求异常:",error)
  }
)

export default service
